package com.qianxun.plugins.log;

import java.lang.annotation.*;

/**
 * 日志切入点
 * @author: huwei
 * @date: 2019/10/15 16:50
 * @version: 1.0.0
 */
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface LogPoint {
    /**
     * 唯一标识，日志区分
     * @return
     */
    String key() default "";

    /**
     * 日志标识，可用于日志分类，并可针对处理
     * @return
     */
    String[] sign() default "";

    /**
     * 同title()
     * @return
     */
    String value() default "";

    /**
     * 日志标题
     * @return 日志标题
     */
    String title() default "";

    /**
     * 日志描述信息
     * @return 日志描述信息
     */
    String notes() default "";

    /**
     * 是否开启动态的参数注入，默认开启
     * 可以在本类字符串输入的地方，使用#{parameter_name}的方式，可以从入参中查找指定名称参数的值，并注入;
     * 示例：title中获取参数信息
     * #LogPoint(title="查询指定id值为@{id}的用户的信息")
     * @return true or false
     */
    boolean isInjectParameter() default true;

    /**
     * 是否记录方法的返回结果，默认false
     * @return true or false
     */
    boolean isRecordResult() default false;

    /**
     * 限制记录返回结果的最大长度，当超过该长度时，将被截断至设定值，其它值将被抛弃；
     * @return
     */
    int maxLengthForResult() default -1;

    /**
     * 日志记录对象，用户可自行实现，默认为Logger
     * @return
     */
    Class<? extends Logger> logger() default Logger.class;
}
